//
//  LYMainViewController.swift
//  DSDweibo
//
//  Created by Mac on 15/9/8.
//  Copyright © 2015年 FSK. All rights reserved.
//

import UIKit

class LYMainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        
        view.backgroundColor = UIColor.purpleColor()
        
        /// 创建自控制器
        addChildViewControllers();
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
        // 添加加号按钮
        setupComposeBtn()
    }
    
    /// 添加加号按钮
    private func setupComposeBtn()
    {
        tabBar.addSubview(composeBtn)
        
        // 调整按钮的位置
        let width = UIScreen.mainScreen().bounds.width / CGFloat(viewControllers!.count)
        
        let rect = CGRect(x:0, y:0, width:width, height:49)
        
        // 第一个参数:是frame的大小
        // 第二个参数:是x方向偏移的大小
        // 第三个参数: 是y方向偏移的大小
        composeBtn.frame = CGRectOffset(rect, 2 * width, 0)
    }
    
    private func addChildViewControllers()
    {
        // 获得本地json数据路径
        let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
        
        // 如果json有值才会转换成NSData数据
        if let jsonPath = path{
            
            // 通过路径获得数据
            let jsonData = NSData(contentsOfFile: jsonPath)
            
            do{
                // 将数据转成数组
                // 这里又可能报错,将可能报错的代码放到do - catch中
                // try: 如果有错会跳到catch中执行错误
                // try!: 如果有错会直接崩溃
                let dictArray = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)
                //                print(dictArray)
                for dict in dictArray as! [[String: String]]
                {
                    // 报错的原因是因为addChildViewController参数必须有值, 但是字典的返回值是可选类型
                    addChildViewController(dict["vcName"]!, title: dict["title"]!, imageName: dict["imageName"]!)
                }
                //
            }catch
            {
                
                print(error)
                addChildViewController("LYHomeTableViewController", title: "首页", imageName: "tabbar_home")
                addChildViewController("LYHomeTableViewController", title: "消息", imageName: "tabbar_message_center")
                
                addChildViewController("LYNullViewController", title: "", imageName: "")
                
                addChildViewController("LYHomeTableViewController", title: "发现", imageName: "tabbar_discover")
                addChildViewController("LYHomeTableViewController", title: "我", imageName: "tabbar_profile")
            }
            
        }

    
    }


    private func addChildViewController(childControllerName:String, title:String, imageName:String){
        
        // 获取命名空间名称
        let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
//        print(ns) // 命名空间名称:DSDweibo
  
         let cls:AnyClass? = NSClassFromString(ns + "." + childControllerName)
        
        // 告诉编译器真是类型是UITableViewController类
        let vcClass = cls as! UIViewController.Type
        
        // 初始化控制器
        let vc = vcClass.init()
        
        vc.title = title
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
        // 如果要设置全局的navBar和tabBar的颜色,可以再appDelegate中统一设置
//        tabBar.tintColor = UIColor.orangeColor()
        
        // 2.创建导航控制器
        let nav = UINavigationController()
        nav.addChildViewController(vc)
        
        // 3.添加控制器到tabbarVC
        addChildViewController(nav)
    }
    
    // MARK: - 懒加载
    private lazy var composeBtn:UIButton = {
    
        let btn = UIButton()
        
        // 设置前景图片
        btn.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: UIControlState.Normal)
        btn.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
        
        // 设置背景图片
        btn.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: UIControlState.Normal)
        btn.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)
        
        btn.addTarget(self, action: "btnClick", forControlEvents: UIControlEvents.TouchUpInside)
    
        return btn
    }()
    
    /**
    监听加号按钮点击
    注意: 监听按钮点击的方法不能是私有方法
    按钮点击事件的调用是由 运行循环 监听并且以消息机制传递的，因此，按钮监听函数不能设置为 private
    */
    func btnClick()
    {
        print(__FUNCTION__)
    }
   
}
